package br.com.seuimovelnamao.dao;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.seuimovelnamao.model.ContratacaoPlano;
import br.com.seuimovelnamao.model.Plano;
import br.com.seuimovelnamao.model.Usuario;

public class PlanoDAO extends MasterDAO {

	public PlanoDAO(Session session) {
		super(session);
	}

	public Plano getPlano(Long id){
		return (Plano) this.getSession().load(Plano.class, id);
	}
	
	public void remove(Plano p){
		this.getSession().delete(p);
	}
	
	public List<Plano> listaTudo(){
		return this.getSession().createCriteria(Plano.class).list();
	}
	
	public List<Plano> pagina(int inicio, int quantidade){
		return this.getSession().createCriteria(Plano.class).setMaxResults(quantidade).setFirstResult(inicio).list();
	}
	
	public boolean usuarioTemPlanoAtivo(Usuario usuario) {
		Query query = this.getSession().createQuery("SELECT cp FROM ContratacaoPlano AS cp WHERE cp.pago = true AND :data BETWEEN cp.inicio AND cp.fim AND cp.usuario = :usuario");
		ContratacaoPlano cp = (ContratacaoPlano) query.setParameter("data", new Date()).setParameter("usuario", usuario).uniqueResult();
		
		return (cp == null) ? false : cp.isPago();
	}

}